package com.pai4j.common.config.annotation;


import com.pai4j.common.enums.RoleCodeEnum;

import java.lang.annotation.*;

/**
 * @Author: 程序员七七
 * @Date: 26.11.21 11:56 下午
 * 自定义请求权控注解
 * @see com.jianlibot.config.annotation.RequestPermission
 */

/****
 * @Author: 程序员七七
 * 自定义注解
 * @Retention
 * 1、RetentionPolicy.SOURCE：注解只保留在源文件，当Java文件编译成class文件的时候，注解被遗弃；
 * 2、RetentionPolicy.CLASS：注解被保留到class文件，但jvm加载class文件时候被遗弃，这是默认的生命周期；
 * 3、RetentionPolicy.RUNTIME：注解不仅被保存到class文件中，jvm加载class文件之后，仍然存在；
 * -----------------------------------------------------------------------------------------
 * @Target
 * 1.CONSTRUCTOR:用于描述构造器
 * 2.FIELD:用于描述域
 * 3.LOCAL_VARIABLE:用于描述局部变量
 * 4.METHOD:用于描述方法
 * 5.PACKAGE:用于描述包
 * 6.PARAMETER:用于描述参数
 * 7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
 * -----------------------------------------------------------------------------------------
 * @Documented
 * 用于描述其它类型的annotation应该被作为被标注的程序成员的公共API，因此可以被例如javadoc此类的工具文档化，Documented是一个标记注解，没有成员。
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestPermission {

    /***
     * 需要进行校验的权限类型，默认校验管理员
     * @see RoleCodeEnum
     * @return
     */
    RoleCodeEnum[] role() default {RoleCodeEnum.ADMIN};
}
